﻿using System;
using System.Text.RegularExpressions;
using System.Windows.Forms;

namespace regtest {
    public partial class MainForm : Form {
        public MainForm() {
            InitializeComponent();
        }

        private void BtnParseClick(object sender, EventArgs e) {
            int iCountMatchs = 0;
            try {
                // Очищаем лист-бокс
                listBox1.Items.Clear();
                statusBar1.Text = "Parsing...";

                // создаем объект re, задавая в его конструкторе
                // шаблон и опции
                //string options = tbOptions.Text;
                var re = new Regex(txtPattern.Text, RegexOptions.None);

                // Выполняем поиск заданного выше шаблона внутри
                // текста и текстового поля tbTextForSearch
                MatchCollection mc = re.Matches(tbTextForSearch.Text);
                iCountMatchs = mc.Count;

                // Выводим информацию о количестве найденных вхождений...
                statusBar1.Text = "Load list (" + iCountMatchs + ")...";

                // ...и заносим информацию о них в лист-бокс.
                listBox1.BeginUpdate();
                foreach (Match m in mc) {
                    // Для хранения информации о найденном вхождении
                    // мы используем созданный нами класс MyItem.
                    // Элементы управления (типа лист-бокса) в .Net
                    // позволяют хранить вместо текстового значения 
                    // объект, а при отображении текста в строке вызывают
                    // метод - ToString. Так что объект любого класса,
                    // реализующего метод ToString, может выступать в 
                    // качестве элемента лист-бокса.
                    listBox1.Items.Add(new MyItem(m.ToString(), m.Index, m.Length));
                }
            }
            catch (Exception e1) {
                MessageBox.Show(e1.ToString(), "Error");
            }
            finally {
                listBox1.EndUpdate();
                statusBar1.Text = "Done " + iCountMatchs;
            }
        }
       
    }
}